package org.dromara.administration.domain.bo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.administration.domain.base.AdmSealBaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;

import java.util.Date;
import java.util.List;

/**
 * 公章管理保存业务对象
 * 继承基类，在需要验证的字段上添加验证注解
 *
 * @author LUSH
 * @date 2025-05-21
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class AdmSealSaveBo extends AdmSealBaseEntity {

    /**
     * 主键（修改时不能为空）
     */
    @NotNull(message = "主键不能为空", groups = {EditGroup.class})
    @Null(message = "新增时主键必须为空", groups = {AddGroup.class})
    private Long id;

    /**
     * 编号
     */
    @NotBlank(message = "编号不能为空")
    @Size(max = 50, message = "编号长度不能超过50个字符")
    @Override
    public String getNumber() {
        return super.getNumber();
    }

    /**
     * 申请部门
     */
    @NotNull(message = "申请部门不能为空")
    @Override
    public Long getDeptId() {
        return super.getDeptId();
    }

    /**
     * 使用日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @NotNull(message = "使用日期不能为空")
    @Future(message = "使用日期必须是未来日期")
    @Override
    public Date getUseDate() {
        return super.getUseDate();
    }

    /**
     * 使用类型
     */
    @NotNull(message = "使用类型不能为空")
    @Override
    public Character getUseType() {
        return super.getUseType();
    }

    /**
     * 印章类型
     */
    @NotBlank(message = "印章类型不能为空")
    @Override
    public String getSealType() {
        return super.getSealType();
    }

    /**
     * 用章事由
     */
    @NotBlank(message = "用章事由不能为空")
    @Size(max = 500, message = "用章事由长度不能超过500个字符")
    private String sealCause;

    /**
     * 审批状态
     */
    @NotNull(message = "状态不能为空")
    @Size(max = 1, message = "状态长度不能超过1个字符")
    @Override
    public String getStatus() {
        return super.getStatus();
    }

    /**
     * 负责人意见
     */
    @Size(max = 500, message = "负责人意见长度不能超过500个字符")
    private String approverIdea;

    /**
     * 负责人ID集合（多个用逗号分隔）
     */
    @NotBlank(message = "负责人不能为空")
    @Pattern(regexp = "^\\d+(,\\d+)*$", message = "负责人ID格式不正确")
    private String principalIds;

    /**
     * 备注
     */
    @Size(max = 500, message = "备注长度不能超过500个字符")
    private String remark;

    /**
     * 公章文件列表
     */
    @Override
    public List<AdmSealFileBo> getSealFiles() {
        return super.getSealFiles();
    }
}
